package dao;

import hbt.HibernateDAO;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import bean.MesaBean;


public class MesaDao {

	public void altaMesa(MesaBean DB)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		s.persist(DB);
		t.commit();
	}
	@SuppressWarnings("unchecked")
	public List<MesaBean> listarMesasDisponibles(int localId)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		List<MesaBean> mesas = s.createQuery("select m from LocalBean l inner join l.Areas a inner join a.Sectores s inner join s.Mesas m  where a in (from SalonBean) and m.Estado = 'Libre' and l.idLocal = ?").setInteger(0, localId).list();
		t.commit();
		return mesas;
	}
	

	public void actualizarMesaCombinada(MesaBean mesaBean,int mesaReferencia)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		String sql1 = " UPDATE MesaBean SET idMesaCombinada = ? WHERE idMesa = ?";
		s.createQuery(sql1).setInteger(1, mesaBean.getIdMesa()).setInteger(0, mesaReferencia).executeUpdate();
		t.commit();
	}
	
	public void ocuparMesa(MesaBean mesaBean)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		String sql1 = " UPDATE MesaBean SET Estado = 'Ocupada' WHERE idMesa = ?";
		s.createQuery(sql1).setInteger(0, mesaBean.getIdMesa()).executeUpdate();
		t.commit();
	}
	@SuppressWarnings("unchecked")
	public List<MesaBean> listarMesasOcupadas(int localId)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		List<MesaBean> mesas = s.createQuery("select m from LocalBean l inner join l.Areas a inner join a.Sectores s inner join s.Mesas m  where a in (from SalonBean) and m.Estado = 'Ocupada' and ((m.idMesa = m.idMesaCombinada) or  (m.idMesaCombinada = 0)) and l.idLocal = ?").setInteger(0, localId).list();
		t.commit();
		return mesas;
		
		//select m from LocalBean l inner join l.Areas a inner join a.Sectores s inner join s.Mesas m  where a in (from SalonBean) and m.Estado = 'Ocupada' and ((m.idMesa = m.idMesaCombinada) or  (m.idMesaCombinada = 0)) and l.idLocal = ?
		
	}
	
	@SuppressWarnings("unchecked")
	public List<MesaBean> listarMesasxLocal(int LocalId)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		
		List<MesaBean> mesas = s.createQuery("select m from LocalBean l inner join l.Areas a inner join MesaBean m where m.Estado = 'Libre'").list();
		t.commit();
		return mesas;
		
	}
	public MesaBean getMesa(Integer idMesa) {
		Session s = HibernateDAO.getInstancia().getSession();	
		Transaction t = s.beginTransaction();
		MesaBean m = (MesaBean) s.createQuery("from MesaBean m where Estado = 'Ocupada' and idMesa :id").setInteger("id", idMesa).uniqueResult();
		t.commit();
		return m;
	}
	public boolean EsMesaCombinada(MesaBean mesaBean) {
		boolean encontrado = false;
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		MesaBean claves =  (MesaBean) s.createQuery("FROM MesaBean WHERE idMesaCombinada=? and idMesaCombinada = idMesa ").setInteger(0, mesaBean.getIdMesa()).uniqueResult();
		t.commit();
		if(claves != null){
			
	        encontrado = true;
	    }
		System.out.println(encontrado);
		return encontrado;
	}
	public void LiberarMesasCombinada(MesaBean mesaBean) {
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			String sql1 = " UPDATE MesaBean SET Estado = 'Libre', idMesaCombinada = 0 WHERE idMesaCombinada = ?";
			s.createQuery(sql1).setInteger(0, mesaBean.getIdMesa()).executeUpdate();
			t.commit();		
	}
	
	public void LiberarMesasSimple(MesaBean mesaBean) {
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			String sql1 = " UPDATE MesaBean SET Estado = 'Libre' WHERE idMesa = ?";
			s.createQuery(sql1).setInteger(0, mesaBean.getIdMesa()).executeUpdate();
			t.commit();		
	}
	

}
